package com.xunyin.modules.mtuser.service;

import com.alibaba.fastjson.JSONObject;
import com.xunyin.common.service.BaseService;
import com.xunyin.modules.mtuser.domain.MtUser;
import com.xunyin.modules.mtuser.service.dto.UserDto;
import com.xunyin.modules.mtusergrade.domain.MtUserGrade;
import com.xunyin.pagination.PaginationRequest;
import com.xunyin.pagination.PaginationResponse;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 会员服务接口
 * <p>
 * Created by xunyin
 * CopyRight 讯音云商 https://www.tonetn.com
 */
public interface MemberService extends BaseService<MtUser> {

    /**
     * 更新活跃时间
     *
     * @param userId 会员ID
     * @return
     */
    boolean updateActiveTime(Integer userId);

    /**
     * 获取当前操作会员信息
     *
     * @param userId
     * @param accessToken
     * @return
     */
    MtUser getCurrentUserInfo(HttpServletRequest request, Integer userId, String accessToken);

    /**
     * 分页查询会员列表
     *
     * @param paginationRequest
     * @return
     */
    PaginationResponse<UserDto> queryMemberListByPagination(PaginationRequest paginationRequest);

    /**
     * 添加会员
     *
     * @param reqUserDto
     */
    MtUser addMember(MtUser reqUserDto);

    /**
     * 编辑会员
     *
     * @param reqUserDto
     */
    MtUser updateMember(MtUser reqUserDto);

    /**
     * 通过手机号添加会员
     *
     * @param mobile
     */
    MtUser addMemberByMobile(String mobile);

    /**
     * 根据会员ID获取会员信息
     *
     * @param id 会员ID
     */
    MtUser queryMemberById(Integer id);

    /**
     * 根据会员名称获取会员信息
     *
     * @param name 会员名称
     */
    MtUser queryMemberByName(String name);

    /**
     * 根据会员ID获取会员信息
     *
     * @param openId 微信openId
     */
    MtUser queryMemberByOpenId(String openId, JSONObject userInfo);

    /**
     * 根据会员组ID获取会员组信息
     *
     * @param id 会员组ID
     */
    MtUserGrade queryMemberGradeByGradeId(Integer id);

    /**
     * 根据会员手机获取会员信息
     *
     * @param mobile 会员手机
     */
    MtUser queryMemberByMobile(String mobile);

    /**
     * 根据会员号获取会员信息
     *
     * @param userNo 会员号
     */
    MtUser queryMemberByUserNo(String userNo);

    /**
     * 根据会员ID 删除店铺信息
     *
     * @param id       会员ID
     * @param operator 操作人
     */
    Integer deleteMember(Integer id, String operator);

    /**
     * 根据条件搜索会员分组
     */
    List<MtUserGrade> queryMemberGradeByParams(Map<String, Object> params);

    /**
     * 获取会员数量
     */
    Long getUserCount(Integer storeId);

    /**
     * 获取会员数量
     */
    Long getUserCount(Integer storeId, Date beginTime, Date endTime);

    /**
     * 获取活跃会员数量
     */
    Long getActiveUserCount(Integer storeId, Date beginTime, Date endTime);

    /**
     * 重置手机号
     *
     * @param mobile 手机号码
     * @param userId 会员ID
     */
    void resetMobile(String mobile, Integer userId);
}
